Mini projet magasin

Problématique

- Établir une jauge de personnes présentes dans le magasin, en accord avec les règles sanitaires.


Cahier des charges

  • Explication du projet
  • Le but du projet est de permettre aux clients de voir en direct le nombre de personnes présentes. Ce nombre est affiché sur un afficheur digital.

  • Fonctionnement
  • Il y a deux capteurs de distance à ultrasons. Le premier détecte si quelqu'un passe à l'entrée et ajoute un au compteur, le second détecte les passages à la sortie et enlève donc un au compteur. Un "bip" est déclenché à chaque passage pour le confirmer.

  • Répartition des tâches
  • Tout d'abord, Erwan et Samuel se sont occupés du code des capteurs de distance et du "bip" sonore. Ensuite Mathéo a programmé l'afficheur digital. Samuel a rédigé le bilan html du projet.

    Le code et ses explications

    
    -=-=-=-=-=-=-   CARTE 1 - CAPTEURS -=-=-=-=-=-=-
    # importation des bibliothèques microbit
    from microbit import *
    from micro_grove import *
    import radio
    
    #on choisit un canal pour communiquer entre les cartes
    radio.config(channel=22)
    radio.on()
    
    # les notes sont définies en Scientific Pitch Notation (SPN).
    entree = "f5:2" #Bip sonore quand quelqu'un entre
    sortie = "c4:2" #Idem quand quelqu'un sort
    
    
    while True:
        t = mesure_temps_A_R(pin1)
        distance = t * 0.034328 / 2 # 1er capteur mesure la distance en cm
        if distance < 30:
            play(entree) # joue le bip d'entrée
            radio.send("entree") # Envoie "entree" à la carte 2
        t2 = mesure_temps_A_R(pin2)
        distance2 = t2 * 0.034328 / 2 # 2ème capteur
        if distance2 < 30:
            play(sortie)
            radio.send("sortie")
        sleep(700) # attend 0.7 secondes, pour compter qu'une fois chaque personne
    
    
    -=-=-=-=-=-=-   CARTE 2 - ACTIONNEUR -=-=-=-=-=-=-
    from microbit import *
    from microbit import *
    import radio
    
    radio.config(channel=22)
    radio.on()
    n_client = 0
    
    
              # -=- Code nécessaire pour l'afficheur -=- 
    ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')
    
    def start4dd(clk,dio):
      dio.write_digital(0)
      clk.write_digital(0)
    
    def stop4dd(clk,dio):
      dio.write_digital(0)
      clk.write_digital(1)
      dio.write_digital(1)
    
    def writeByte4dd(clk,dio,cmd):
      for i in range(8):
        dio.write_digital((cmd>>i)&1)
        clk.write_digital(1)
        clk.write_digital(0)
      clk.write_digital(0)
      clk.write_digital(1)
      clk.write_digital(0)
    
    def command4dd(clk,dio,cmd):
      start4dd(clk,dio)
      writeByte4dd(clk,dio,cmd)
      stop4dd(clk,dio)
    
    def write4dd(clk,dio,s,p=0):
      if not 0<=p<=3:
        raise ValueError('Position out of range')
      command4dd(clk,dio,0x40)
      start4dd(clk,dio)
      writeByte4dd(clk,dio,0xC0|p)
      for i in s:
        writeByte4dd(clk,dio,i)
      stop4dd(clk,dio)
      command4dd(clk,dio,0x88|6)
    
    def tm1637_init(clk,dio):
      command4dd(clk,dio,0x40)
      command4dd(clk,dio,0x88|6)
    def tm1637_encodeNum(str):
      s = bytearray(len(str))
      for i in range(len(str)):
        o = ord(str[i])
        if o >= 48 and o <= 57:
          s[i] = ASCII_4DD_NUM[o-48]
      return s
    tm1637_init(pin0, pin14)
    
    def tm1637_setNumber(clk, dio, n):
      if not -999 <= n <= 9999:
        raise ValueError('Number out of range')
      write4dd(clk, dio, tm1637_encodeNum('{0: >4d}'.format(int(n))))
              # -=- Code nécessaire pour l'afficheur -=- 
    
    
    while True:
        message = radio.receive() # met le mot reçu dans la variable message
        if message == "entree": # Si quelqu'un est sorti
            n_client = n_client +1 # On ajoute 1 au compteur
        if message == "sortie":
            n_client = n_client -1
        tm1637_setNumber(pin0, pin14, n_client) # Affiche le nombre de clients
        sleep(100)
                          
  • Difficultés
  • Nos fichiers se sont supprimés à deux reprises dans le dossier de la classe. La première fois nous avons tout recodé et la deuxième nous avions la plupart du code sur une clé USB.

    Créateurs incroyables

            - Samuel BURON
            - Mathéo GUILLEVIC
            - Erwan MORICEAU
            

    Images du projet


  • Carte 1

  • Carte 2

  • Carte 356-cr et 245-yk